package simplefactory;



/**
 * Title: ShoesStore <br>
 * Description: <br>
 * Copyright (c) 传化物流版权所有 2017 <br>
 * Created DateTime: 2017-3-6 10:08
 * Created by Wentao.Shi.
 */

import bean.Shoes;

/**
 简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单：定义一个用于创建对象的接口。
 先来看看它的组成：
 1) 工厂类角色：这是本模式的核心，含有一定的商业逻辑和判断逻辑，用来创建产品
 2) 抽象产品角色：它一般是具体产品继承的父类或者实现的接口。
 3) 具体产品角色：工厂类所创建的对象就是此角色的实例。在Java中由一个具体类实现。
 */
public class ShoesStore {
    public static void saleShoes(int shoesType){
        Shoes shoes=ShoesFactory.createShoes(shoesType);
        shoes.saleShoes();
    }
    public static void main(String[] args) {
        saleShoes(ShoesFactory.SHOES_TYPE_NORMAL);
        saleShoes(ShoesFactory.SHOES_TYPE_SPORT);
    }
}
/**
当客户不再满足现有的鞋子类型的时候，想要一种新类型的鞋子，如板鞋，只要这种鞋子符合抽象产品制定的规则，那么只要通知工厂类知道就可以被客户使用了。
所以对产品部分来说，它是符合开闭原则的；但是工厂部分好像不太理想，因为每增加一种新鞋，都要在工厂类中增加相应的创建业务逻辑（createShoes(int type)方法需要新增case），
这显然是违背开闭原则的。可想而知对于新产品的加入，工厂类是很被动的。
于是工厂方法模式作为救世主出现了。 工厂类定义成了接口,而每新增的车种类型,就增加该车种类型对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码。
 */
